Skip to content

release: v0.9 — Table Features, Chart Improvements, Gauge Thresholds - #199

Merged
alfredo1996 merged 63 commits into
devfrom
release/0.9
Mar 26, 2026
Merged

release: v0.9 — Table Features, Chart Improvements, Gauge Thresholds#199
alfredo1996 merged 63 commits into
devfrom
release/0.9

Conversation

@alfredo1996

@alfredo1996 alfredo1996 commented Mar 26, 2026

Copy link
Copy Markdown
Owner

Summary

Release v0.9 consolidation PR — merges all completed feature branches into dev.

Key features

Test plan

  • Unit tests: 1140 component + 1294 app (all passing)
  • E2E tests: 222 passed, 4 flaky (pre-existing CM6 typing)
  • TypeScript type-check: passing
  • Build: clean
  • Seed validation: all 8 dashboards valid

🤖 Generated with Claude Code

Summary by CodeRabbit

Release Notes

  • New Features

    • Added color scale gradient formatting for table cells
    • Enabled table row grouping with aggregation controls
    • Added table column resizing
    • Introduced reference lines on bar and line charts
    • Added axis label rotation for bar charts
    • Implemented data zoom for chart scrolling
    • Enhanced pie charts with top-N grouping and donut center text
    • Added gauge threshold zone visualization
    • Enabled form field pre-population from parameter widgets
    • Added GitHub Flavored Markdown table support
  • Improvements

    • Enhanced tooltip formatting with improved number displays
    • Improved styling rules with per-rule column targeting and bold emphasis
    • Better code editor text input handling
    • Added decimal place control for single-value charts

alfredorubin96 and others added 30 commits March 22, 2026 16:34
Add shared formatNumber() and buildTooltipFormatter() to chart-utils.ts:
- Decimal places config (0-6, -1 for automatic)
- Comma/compact/percent formatting
- Prefix/suffix support
- Consistent tooltip formatting across all ECharts chart types

Add decimalPlaces option to single-value, bar, line, and pie chart schemas.
Update SingleValueChart to use the shared formatter.

Closes #138

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add enableDataZoom prop to BaseChart that injects ECharts DataZoom
(type: 'inside') on both x and y axes. Users can scroll-to-zoom to
explore large datasets. Disabled by default (opt-in via chart options).

- New prop: enableDataZoom on BaseChartProps
- DataZoom injected into merged options when enabled
- Chart option exposed in chart-options-schema for bar/line
- 3 new tests for DataZoom behavior

Closes #134

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add buildCategoryAxisLabel() utility to chart-utils.ts:
- Auto-rotate 30° at 8+ categories, 45° at 15+
- Truncate labels >15 chars with ellipsis (U+2026)
- Tooltip shows full text on hover
- Configurable rotation override via chart option

Wire into BarChart component with axisLabelRotation prop.
Add "Axis Label Rotation" option to chart-options-schema.

Closes #137

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add parseReferenceLines() and buildMarkLineFromRefs() to chart-utils.ts.
Wire markLine into BarChart — reference lines attach to first series.
Register MarkLineComponent in ECharts and update all test mocks.

- JSON config: [{"value":50,"label":"Target","color":"#ff0000"}]
- Chart option added to bar and line in chart-options-schema
- 7 new tests for reference line parsing

Closes #136

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- groupTopN() utility: groups slices beyond top N into "Other"
- Donut center text: shows total or custom text via ECharts graphic element
- Register GraphicComponent in ECharts
- New chart options: topN, donutCenterText
- 5 new tests for groupTopN

Closes #139

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Enable drag-to-resize column borders via TanStack Table's built-in
enableColumnResizing. Double-click a resize handle to auto-fit.

- New prop: enableColumnResizing on DataGrid
- Resize handle rendered as a vertical bar in each header cell
- Chart option "Column Resizing" added to table options

Closes #140

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add parseGaugeThresholdZones() to chart-utils.ts — converts threshold
JSON to ECharts axisLine.lineStyle.color format.

- New: thresholdZones prop on GaugeChart
- Colored zones on gauge arc (e.g. green/yellow/red)
- Chart option "Threshold Zones (JSON)" in schema
- 4 new tests

Closes #142

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add evaluateCellRule() and resolveCellStyle() to cell-formatting.ts:
- Operators: >, <, ==, contains (case-insensitive)
- Styles: backgroundColor, color, fontWeight (any CSSProperties)
- First matching rule wins

Wire into DataGrid via cellFormattingRules prop.
Chart option "Cell Formatting Rules (JSON)" in schema.
11 new tests.

Closes #141

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…trast

#103 — ECharts ARIA:
- Add ariaDescription prop to BaseChart for custom screen reader descriptions
- Wire aria.label.description into merged ECharts options
- Add role="img" and tabIndex={0} to chart container for keyboard focus

#101 — Accessibility audit fixes:
- CodePreview: fix contrast by removing /50 opacity on language label
- JsonViewer: replace div with button for expand/collapse, add aria-expanded

#102 — Keyboard navigation:
- Chart containers now focusable via tabIndex={0}
- JsonViewer nodes navigable via keyboard (native button focus)

Closes #103, Closes #101, Closes #102

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bug 1 — CodeMirror bracket wrapping:
- Add closeBrackets() extension and closeBracketsKeymap to query editor
- Selecting text and typing ( now wraps as (text) instead of replacing
- Both Cypher and SQL bracket facets are now activated

Bug 2 — Radar chart uniform shape:
- Use single global max across all indicators instead of per-indicator max
- Values like 172 vs 9 now show actual relative differences
- Explicit max column values preserved when provided
- 4 new/updated tests for global max behavior

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New "Chart Catalog" dashboard with 12 pages, one per chart type:
- Bar: vertical, horizontal, stacked, show values, styling, click, colorblind + 6 palettes
- Line: default, smooth+area, stepped, show points, colorblind + 6 palettes
- Pie: default, donut, rose, labels inside, click, colorblind + 6 palettes
- Single Value: prefix/suffix, comma, compact, styling, trend
- Table: default, sorting+filters, selection, click
- Gauge: default, no pointer, half gauge, styling + 6 palettes
- Radar: default, circle, filled+values, colorblind + 6 palettes
- Sankey: horizontal, vertical + 6 palettes
- Treemap: default, with values + 6 palettes
- Sunburst: default, no labels + 6 palettes
- Content: markdown (with tables), JSON viewer, iframe
- Detail: click action target page

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When onClick is set, CrossFilterTag renders as a <button>. The remove
control inside was also a <button>, creating invalid nested buttons
that cause React hydration errors.

Fix: use <span role="button"> with keyboard handlers when the outer
element is a button. Native <button> is preserved when outer is a div.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add 6 new pages (18 total) to the Chart Catalog seed dashboard:

- Page 12: Graph — force/circular/hierarchical, node sizes, labels, physics
- Page 13: Parameter Widgets — select (searchable/not), text, date, date-range, relative-date
- Page 14: Form Widget — default form, custom button + no-reset
- Page 15: Behavior — showRefreshButton, manualRun, cacheMode (forever/TTL)
- Page 16: Axis & Grid — axis labels, grid lines off, bar width/gap, legend off, sorted slices, no percentages
- Page 17: Advanced — table pagination/pageSize, gauge min/max/progress/detail, radar legend, sankey nodeWidth/gap, sunburst sort/highlight, treemap breadcrumb/saturation, JSON fontSize/theme/copyButton

Every chart option from chart-options-schema.ts now has at least one
widget demonstrating it.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ces)

Add FILMED_IN and BORN_IN relationships to Neo4j seed connecting Movies
and Persons to City nodes (which already had lat/lng coordinates).

New Map Chart page in Chart Catalog (6 widgets):
- Cities by population (OSM)
- Filming locations (Carto Light)
- Birthplaces (Carto Dark)
- Clustered markers
- Custom zoom / no popup
- Large markers with click action

All map options covered: tileLayer (osm/carto-light/carto-dark),
autoFitBounds, markerSize, showPopup, clusterMarkers, zoom, minZoom, maxZoom.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Markdown: use actual \n newlines instead of escaped \\n literals
- iFrame: replace echarts.apache.org (blocks framing via X-Frame-Options)
  with Wikipedia which allows embedding

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add GFM table parsing to markdown-widget.tsx on this branch
  (was only on feat/issue-143-markdown-tables branch)
- Reduce graph widgets from 6 to 4, use smaller queries (LIMIT 10)
  to prevent NVL physics engine overload with simultaneous renders
- Fix graphSmall query: bind relationship variable properly
- Type annotations for parseCells in markdown parser

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Gate NVL canvas visibility with a layoutReady state that flips true only
when onLayoutDone fires. Reset is synchronous during render (not useEffect)
to avoid a race where the effect runs after onLayoutDone on the main thread.
Replace the arbitrary 100ms autoFit timer with a deterministic layoutReady
guard.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add rule-based cell styling (bg color, text color, bold, icon badges)
and color scale gradient support to the table widget. Rules are
configured per-column with operators (>, <, ==, contains, between,
is_null, etc.) via a new ConditionalFormatPanel in the widget editor
Style tab.

Changes:
- Add CellFormatRule, ColorScaleConfig types and resolveCellFormat(),
  interpolateColor() functions to styling-rule.ts
- Add getCellStyle prop to DataGrid for per-cell inline styles
- Create ConditionalFormatPanel component for rule/color-scale config
- Wire through ChartRenderer → TableRenderer → DataGrid
- Store config in widget.settings.conditionalFormatting
- 27 new tests (21 logic + 3 DataGrid + 6 panel)

Closes #141

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…groups

Add row grouping to DataGrid using TanStack Table's built-in grouping
and expansion APIs. Groups are collapsible with expand/collapse all
toggle, show row counts, and display aggregated values (sum) for
numeric columns in group header rows.

Changes:
- Add enableGrouping, initialGrouping props to DataGrid
- Import getGroupedRowModel, getExpandedRowModel from TanStack Table
- Render group rows with expand/collapse toggles and row counts
- Render aggregated cells in group headers
- Add collapse all / expand all buttons
- Add enableGrouping and groupBy options to table chart-options-schema
- Wire up in TableRenderer with auto-detected numeric aggregation
- 7 new tests for grouping behavior

Closes #106

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…tests

- Add missing starts_with and ends_with operators to OPERATORS array
- Only coerce values to numeric for numeric operators; preserve raw
  strings for text operators (contains, starts_with, etc.)
- Fix icon "None" selection: use __none sentinel consistently, clear
  to undefined on save
- Add 11 new test cases covering all remaining operators and edge cases

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…S errors

- Fix color scale min/max: skip null, undefined, empty, whitespace values
  before Number() coercion to prevent blank cells skewing to 0
- Use row.getLeafRows().length instead of row.subRows.length for
  accurate row counts in multi-level grouped rows
- Add useEffect to sync grouping state when initialGrouping prop changes
- Move CellFormatRule/ColorScaleConfig to top-level imports in
  chart-renderer.tsx (was inline import())
- Remove unused imports in data-grid-grouping.test.tsx (within, vi)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add shared formatNumber() and buildTooltipFormatter() to chart-utils.ts:
- Decimal places config (0-6, -1 for automatic)
- Comma/compact/percent formatting
- Prefix/suffix support
- Consistent tooltip formatting across all ECharts chart types

Add decimalPlaces option to single-value, bar, line, and pie chart schemas.
Update SingleValueChart to use the shared formatter.

Closes #138

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Apply userAria spread before ariaDescription so the explicit
  description takes precedence over user-provided aria options
- Add ariaDescription to useEffect dependency array to re-apply
  when the description changes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
alfredorubin96 and others added 19 commits March 24, 2026 12:54
…lease/chart-improvements

# Conflicts:
#	component/src/charts/bar-chart.tsx
#	component/src/charts/chart-utils.ts
#	component/src/charts/line-chart.tsx
#	component/src/components/composed/chart-options-schema.ts
…els, markLine, pie donut)

Merges PRs #169, #170, #171, #173, #174 into a single release branch.
Resolves merge conflicts in chart-utils.ts, bar-chart.tsx, line-chart.tsx,
and chart-options-schema.ts.

Includes:
- Number formatting for single-value and tooltips (#169)
- DataZoom support for bar and line charts (#170)
- Auto-rotate and truncate axis labels (#171)
- Reference lines (markLine) for bar and line charts (#173)
- Donut center text and Top-N grouping for pie chart (#174)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…tting' into release/table-features

# Conflicts:
#	component/src/components/composed/__tests__/data-grid.test.tsx
#	component/src/components/composed/data-grid.tsx
…nto release/table-features

# Conflicts:
#	component/src/components/composed/chart-options-schema.ts
#	component/src/components/composed/data-grid.tsx
…ease/chart-improvements

# Conflicts:
#	component/src/charts/__tests__/format-number.test.ts
#	component/src/charts/base-chart.tsx
#	component/src/charts/chart-utils.ts
#	component/src/charts/types.ts
#	component/src/components/composed/chart-options-schema.ts
When a user configures a click action with a source field matching a
query column name (e.g. "revenue"), the click point from ECharts only
contains {name, value, seriesName, dataIndex} — the column name lookup
returned undefined and the action silently failed.

Now the original data row is spread into the click point using
dataIndex, so column-name source fields resolve correctly alongside
the built-in ECharts fields.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…provements seed dashboard

- Wire enableDataZoom, referenceLines, axisLabelRotation to BarChart
- Wire enableDataZoom, referenceLines to LineChart
- Wire topN, donutCenterText to PieChart
- Wire decimalPlaces to SingleValueChart
- Fix typeInEditor CM6 view lookup: fallback to .cm-editor tile (mirrors EditorView.findFromDOM)
- Fix code-completion tests: use CM6 dispatch to bypass closeBrackets corruption
- Add buildChartImprovements seed dashboard (6 pages covering all new features)
- Add grouped bar example to Chart Catalog
- Fix markdown seed: use real newlines instead of escaped \\n
- Fix click enrichment seed: use table widget for non-numeric column demo

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: chart improvements + accessibility + fixes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat(component): add threshold zones to gauge chart
5-page dashboard showcasing column resizing, row grouping (single + nested),
conditional formatting (numeric rules with icons, string operators, null checks),
color scales (gradient heat maps), and all features combined.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1. Fix conditional formatting not rendering — remove legacy resolveCellStyle
   path in DataGrid, always use getCellStyle callback from table-renderer
2. Fix column resize handles ungrabable — widen from w-1 to w-2, show on
   header hover via group-hover, wire enableColumnResizing from table-renderer
3. Fix editor scrollbar overlapping query text — add paddingBottom to .cm-scroller
4. Add aggregation function selector (sum/mean/median/count/min/max) for
   grouped rows, replacing hardcoded sum
5. Remove cellFormattingRules JSON text field from table options schema
6. Move ConditionalFormatPanel from Style tab to Advanced tab under
   Rule-Based Styling, gated on preview data availability

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ing, grid skeleton

Major table & editor UX improvements:

- Unified styling: removed CellFormatRules, merged into StylingRules with
  per-rule `column` field so each rule targets its own column
- Bold support: added `bold` property to StylingRule, toggle in editor UI,
  applied as fontWeight in table rows
- Color scales moved to Style tab (from removed Cell-Level Formatting section)
- Grouping fix: added React key to DataGrid to force TanStack Table remount
  when aggregationFn changes (bypasses stale memo cache)
- Preview: passes cached TanStack Query data into editor for instant preview
- ValueOrParamInput: auto-infers parameter vs literal (removed toggle buttons)
- Form param seeding: form fields auto-populate from external parameters
  (click-actions, selectors) with touched-field tracking
- Grid skeleton: shows skeleton cards during container width measurement,
  eliminating page-switch layout flash
- Seed validation: Zod schemas validate all seed dashboard layouts against
  app types; catches misplaced chartOptions (colorPalette, colorblindMode)
- Fixed all seed-demo.mjs and seed-neoboard.sql widget configs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Covers stylingRuleSchema (column, bold, parameterRef), stylingConfigSchema,
colorScaleSchema, conditionalFormattingSchema, misplaced chartOptions
detection (colorPalette, colorblindMode, enableGrouping at settings root),
and validateDashboardLayout function. Closes SonarCloud coverage gap.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
CI type-check failed because tooltip-formatter.test.ts imports TooltipParam
which was not exported from chart-utils.ts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The exported TooltipParam interface exposes marker as string|undefined,
so the robustness test needs a double cast to satisfy strict type-check.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: table & data grid — column resize, conditional formatting, row grouping
@coderabbitai

coderabbitai Bot commented Mar 26, 2026

Copy link
Copy Markdown

Caution

Review failed

Pull request was closed or merged during review

Walkthrough

This PR introduces comprehensive enhancements to chart/table configuration, conditional formatting with color scales, form parameter pre-population, table grouping capabilities, and CodeMirror editor reliability. It adds new chart options (reference lines, axis rotation, data zoom, top-N grouping, decimal places), migrates styling rule configuration from global to per-rule targeting with bold support, implements cell-level color gradient styling, and extends table functionality with grouping/aggregation. Schema validation utilities, seed data updates, and extensive test coverage are included.

Changes

Cohort / File(s) Summary
E2E CodeMirror Editor Helpers
app/e2e/code-completion.spec.ts, app/e2e/fixtures.ts
Updated CodeMirror dispatch to insert text directly via view.dispatch rather than keyboard input, with fallback EditorView resolution (cm-content.cm-editor). Expanded dispatch failure handling to cover "readonly" outcome in addition to "no-view".
E2E Test Cases
app/e2e/form-widget.spec.ts, app/e2e/styling-rules.spec.ts
Added test for form field pre-population from parameter-select widgets. Updated styling-rules tests to validate per-rule column selectors instead of global target column; reformatted assertions for consistency.
Dashboard Editor Preview Caching
app/src/app/(dashboard)/[id]/edit/page.tsx
Added cachedPreviewData state to preserve existing React Query cache when opening edit mode, passed as initialPreviewData to widget editor modal to avoid re-running queries.
Widget Editor Modal & Preview
app/src/components/widget-editor-modal.tsx, app/src/components/card-container.tsx
Integrated color scales support with ColorScalePanel UI; added initialPreviewData prop to render cached/initial data without re-querying; auto-preview on first open; passed conditionalFormatting settings to preview rendering.
Styling Rules & Conditional Formatting
app/src/lib/db/schema.ts, app/src/lib/migrate-color-thresholds.ts, component/src/charts/styling-rule.ts
Migrated from global targetColumn to per-rule column?: string; added bold?: boolean per rule; removed targetColumn from migration function; introduced ColorScaleConfig type and interpolateColor() gradient interpolation utility.
Styling Rules Editor UI
app/src/components/widget-editor/styling-rules-editor.tsx
Removed top-level "Target Column" selector; added per-rule column editing via OptionField; added bold toggle button per rule with visual indicator in accordion header.
Form Widget Parameter Binding
app/src/components/form-widget-renderer.tsx, app/src/components/widget-editor/value-or-param-input.tsx
Integrated useParameterValues() hook; seeded form fields from external parameters; replaced toggle-based parameter/value UI with conditional rendering (combobox when suggestions available, plain input otherwise); added touchedFields tracking to preserve user edits.
Table Renderer Enhancements
app/src/components/table-renderer.tsx
Added grouping (enableGrouping, initialGrouping, parseGroupByColumns) with aggregation support (column aggregationFn, aggregatedCell rendering); added column resizing (enableColumnResizing); implemented cell-level gradient styling via getCellStyle and ColorScaleConfig min/max computation; refactored getRowStyle for per-rule column targeting.
Chart Renderer Wiring
app/src/components/chart-renderer.tsx
Extended props with colorScales; enriched click payload with original row data; forwarded settings (axis rotation, reference lines, data zoom, top-N, donut text, decimal places) to underlying chart components; passed colorScales to table renderer.
Chart Utilities Infrastructure
component/src/charts/chart-utils.ts
Added comprehensive utilities: number formatting (formatNumber), tooltip formatting (buildTooltipFormatter), category axis labels (buildCategoryAxisLabel with rotation/truncation), reference lines (parseReferenceLines, buildMarkLineFromRefs), gauge threshold zones (parseGaugeThresholdZones), pie top-N grouping (groupTopN).
Chart Components
component/src/charts/bar-chart.tsx, component/src/charts/line-chart.tsx, component/src/charts/pie-chart.tsx, component/src/charts/gauge-chart.tsx, component/src/charts/single-value-chart.tsx
Added props: axisLabelRotation, referenceLines (bar/line); topN, donutCenterText (pie); thresholdZones (gauge); decimalPlaces (single-value). Integrated formatting utilities; updated tooltip/axis label configuration; applied markLine/graphic overlays.
Base Chart & DataZoom
component/src/charts/base-chart.tsx, component/src/charts/types.ts
Added enableDataZoom, ariaDescription props; conditionally inject ECharts dataZoom inside controls; enhanced accessibility with dynamic aria-label and description.
DataGrid Grouping & Resizing
component/src/components/composed/data-grid.tsx
Added enableColumnResizing, getCellStyle, enableGrouping, initialGrouping props; wired TanStack Table grouping/expansion models; implemented collapse-all/expand-all toolbar; rendered group headers with aggregated values and toggle buttons; applied per-cell styling.
Chart Options Schema & UI
component/src/components/composed/chart-options-schema.ts, component/src/components/composed/chart-options-panel.tsx
Added "column-multi-select" option type for table grouping; introduced shared option groups (dataZoomOptions, tooltipFormatOptions); extended chart-specific options (bar/line/pie/single-value/table/gauge); wired columns prop through OptionField.
Color Scale Configuration Panel
component/src/components/composed/conditional-format-panel.tsx
New component ColorScalePanel for managing color scales: select column, pick min/max colors, visualize gradient, add/remove scales; deprecated aliases for backward compatibility.
Markdown & JSON Viewer Enhancements
component/src/components/composed/markdown-widget.tsx, component/src/components/composed/json-viewer.tsx
Added GFM table parsing with alignment detection and HTML escaping; refactored JSON viewer toggle to semantic <button> with ARIA attributes.
Cross-Filter & Dashboard Grid
component/src/components/composed/cross-filter-tag.tsx, component/src/components/composed/dashboard-grid.tsx
Refactored remove affordance to avoid nested buttons (span role="button" when parent is button). Added grid skeleton placeholder during width measurement.
CodeMirror Integration
component/src/components/composed/query-editor.tsx
Added closeBrackets() extension and keymap to prevent unclosed bracket corruption.
Query Editor Test Mock
component/src/components/composed/__tests__/query-editor.test.tsx
Extended @codemirror/autocomplete mock to include closeBrackets and closeBracketsKeymap.
Dashboard Import/Export Schemas
app/src/lib/dashboard-import.ts
Added Zod schemas: stylingRuleSchema, stylingConfigSchema, colorScaleSchema, conditionalFormattingSchema, dashboardLayoutSchema; extended widgetSchema with settings validation; added validateDashboardLayout() helper function; prevented known chart option keys at settings root level.
Chart Registry & Radar Scaling
app/src/lib/chart-registry.ts
Updated radar chart scaling: single computed globalMax for long-format when no explicit per-indicator max; shared wideMax for wide-format; stricter validation for numeric max values (finite, > 0).
Table Utilities
app/src/lib/table-utils.ts
Added parseGroupByColumns() function to parse comma-separated column IDs from grouping configuration, with whitespace trimming and empty-entry filtering.
Cell Formatting Library
component/src/lib/cell-formatting.ts
New module with cell-based conditional formatting: CellOperator (>, <, ==, contains), CellFormattingRule type, evaluateCellRule(), resolveCellStyle() functions.
Component Exports
component/src/charts/index.ts, component/src/components/composed/index.ts
Added exports: ColorScaleConfig, interpolateColor from styling-rule; ColorScalePanel, ConditionalFormatPanel with prop types.
Vitest Setup & Mocks
component/vitest.setup.ts
Extended ECharts mock to include MarkLineComponent, GraphicComponent.
Comprehensive Test Coverage
app/src/lib/__tests__/*, component/src/charts/__tests__/*, component/src/components/composed/__tests__/*
Added/expanded test suites: radar transforms, dashboard import validation, color threshold migration, table grouping, data grid, conditional formatting, chart utilities (formatting, reference lines, gauge thresholds, pie grouping), accessibility, column resizing, markdown tables, axis labels.
Seed Data & Validation
scripts/seed-demo.mjs, scripts/validate-seed-data.ts
Exported and added new dashboard builders (buildChartImprovements, buildTableFeatures, buildChartCatalog); migrated styling rules to per-rule column targeting; moved chart options under chartOptions nesting; added validation script using dashboardLayoutSchema.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested labels

enhancement, pkg:component, pkg:app, area:charts, area:widgets, area:tables, type: feature

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 73.91% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main changes: three major feature areas (Table Features, Chart Improvements, Gauge Thresholds) for a v0.9 release, matching the PR's consolidation of completed feature branches.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/0.9

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
54.3% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

@alfredo1996
alfredo1996 merged commit e007b30 into dev Mar 26, 2026
8 of 11 checks passed
@alfredo1996
alfredo1996 deleted the release/0.9 branch March 29, 2026 22:22
alfredo1996 added a commit that referenced this pull request May 10, 2026
release: v0.9 — Table Features, Chart Improvements, Gauge Thresholds
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants